AWS CloudFormationからSystems ManagerパラメータストアのAMIを参照するときにそのAMIをアップデートする方法
ども、大瀧です。
少し前にCloudFormationからSystems Managerのパブリックパラメータストアを参照して最新AMIを引っ張って来れるようになりました。以下の記事やドキュメントで示している方法です。
- CloudFormationでいつでも最新のWindows AMIからEC2を起動したい(パブリックパラメータストア利用) | Developers.IO
- AWS Systems Manager Parameter Store を使用して最新の Amazon Linux AMI IDを取得する | Amazon Web Services ブログ
非常に便利な仕組みなのですが、初回作成のあと時間が経ち新しいAMIがリリースされたときにどうやってその最新AMIにアップデートするのかがわからなかったので、試してみた様子をご紹介します。
何も変更せずにCloudFormationスタックを更新すればOK
結論から言うと、テンプレートやパラメータなど何も変更せずにCloudFormationスタックを更新すればOKです。パラメータのAMI IDを参照するリソースが、リソースの要件に応じてその時点で最新のAMI IDにて更新されます。例えばAutoScalingの起動設定であれば最新AMI IDの起動設定が新規作成され、既存の起動設定と置き換えられます。では試してみます。
CloudFormationテンプレートでは、以下のようにECS最適化インスタンスのAMI IDをパラメータで参照し、起動設定のImageId
プロパティにセットしています。
Parameters: FluentdAmiId: Description: ECS Optimized AMI ID Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id> Default: /aws/service/ecs/optimized-ami/amazon-linux/recommended/image_id : Resources: FluentdInstanceLc: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: !Ref FluentdAmiId
スタックを作成し、現時点の起動設定ではAMIがami-0041c416aa23033a2
(amzn-ami-2018.03.e-amazon-ecs-optimized )になっています。
では、作成したスタックを更新します。スタックを選択、[アクション] - [スタックの更新]をクリックします。
更新ウィザードでは以下を選択し、テンプレート/パラメータともに変更しないようにします。
- テンプレートの選択 : 「現在のテンプレートの使用」のまま
- 詳細の指定 : AMIを指定するパラメータ
/aws/service/ecs/optimized-ami/amazon-linux/recommended/image_id
のまま - オプション : 変更なし
通常の更新では変更点が特にないので、変更のプレビューでは"変更なし"となり、更新がエラーになるのですが...
AMI IDを参照する起動設定FluentdInstanceLc
の置換列がTrue
(更新によって置き換えられるリソースを指す)になりました!起動設定を参照するAutoScalingグループもConditional
(一部変更)になっていますね。更新を実行すると...
最新のAMI(amzn-ami-2018.03.f-amazon-ecs-optimized:ami-0d5f884dada5562c6
)がセットされた起動設定が追加されました。このあとAutoScalingグループの更新と続き、更新が完了すると古い起動設定が削除され、スタックの更新は完了です。
まとめ
CloudFormationからSystems ManagerのパブリックパラメータストアのAMI IDを参照するときは、テンプレートやパラメータをいじらずにスタックを更新すれば最新AMIに更新することができます。CloudFormationの運用に役立てていただければ幸いです。